package Interface;

/**
 * 接口不能包含成员变量，除了 static 和 final 变量
 * 接口中所有的方法必须是抽象方法(方法默认为abstract)，Java 8 之后 接口中可以使用 default 关键字修饰的非抽象方法
 * 接口中的方法默认都是公有的public
 */
public interface Animal {

    /**
     * 在接口中定义的属性 等同于 常量，接口中不允许定义变量
     * 如下面的语句相当于：public static final String name = "chenchaoyang"
     */
    String name="";
    void eat();
    void travel();

    /**
     * 接口允许包含具体实现的方法，该方法称为"默认方法"，默认方法使用 default 关键字修饰（Java 8之后）
     */
    public default void defaultMethod(){
		System.out.println("我是接口默认方法");
        privateMethod();
	}

    public static void staticMethod(){
        System.out.println("我是接口静态方法");
        staticPrivateMethod();
    }

    /**
     * 加了private修饰，只有本接口可以使用
     */
    private static  void staticPrivateMethod() {
        System.out.println("我是接口静态私有方法");
    }

     /**
      * JDK 1.9 以后，允许将方法定义为 private
        JDK 1.8 以后，接口里可以有静态方法和方法体
     * 加了private修饰，只有本接口可以使用
     */
    private static  void privateMethod() {
        System.out.println("我是接口私有方法");
    }
}
